package org.poem.handler.increment;

import com.alibaba.otter.canal.protocol.CanalEntry;
import org.poem.CanalClientHeadEntityVO;
import org.poem.TaskDetailAvailabilityMaps;

/**
 * @author poem
 */
public abstract class AbstractClientIncrementHandler implements ClientIncrementHandler {


    /**
     * 处理执行
     *
     * @param canalClientHeadEntityVO 需要处理的数据
     */
    @Override
    public void handle(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //处理方式，可以在这儿做处理
        CanalEntry.EventType eventType = canalClientHeadEntityVO.getEventType();
        Integer availability = TaskDetailAvailabilityMaps.getAvailability(canalClientHeadEntityVO.getTableName());
        if (availability == 1) {
            if (eventType.equals(CanalEntry.EventType.DELETE)) {
                delete(canalClientHeadEntityVO);
            } else if (eventType.equals(CanalEntry.EventType.INSERT)) {
                insert(canalClientHeadEntityVO);
            } else if (eventType.equals(CanalEntry.EventType.CREATE)) {
                createTable(canalClientHeadEntityVO);
            } else if (eventType.equals(CanalEntry.EventType.ERASE)) {
                deleteTable(canalClientHeadEntityVO);
            } else {
                //update
                update(canalClientHeadEntityVO);
            }
        }

    }


    /**
     * 删除数据
     *
     * @param canalClientHeadEntityVO
     */
    protected void delete(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //TODO override
    }

    /**
     * 更新数据
     *
     * @param canalClientHeadEntityVO
     */
    protected void update(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //TODO override
    }

    /**
     * 插入数据
     *
     * @param canalClientHeadEntityVO
     */
    protected void insert(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //TODO override
    }


    /**
     * 新增表
     *
     * @param canalClientHeadEntityVO
     */
    protected void createTable(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //TODO override
    }

    /**
     * 删除表
     */
    protected void deleteTable(CanalClientHeadEntityVO canalClientHeadEntityVO) throws Exception {
        //TODO override
    }
}
